Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Sterowanie roletami przez arduino

Ostatnio zmodyfikowano 2016-01-18 17:37
Autor Wiadomość
gawron631
Temat założony przez niniejszego użytkownika
Sterowanie roletami przez arduino
» 2016-01-15 17:41:00
Witam wszystkich forum.
Jestem nowym użytkownikiem dlatego z góry przepraszam jeśli moje pytania są niefachowe, błędnie sformułowane lub niepoprawne.
Od pewnego czasu uczę się języka cpp przez zabawę z arduino.
Ostatnio chcę zrobić sterowanie roletami, przez bluetooth i włącznik czasowy.
Mój problem polega na tym że działa albo jedno albo drugie, prawdopodobnie jest to spowodowane źle zapisaną pętlą while.
Moje drugie pytanie w jaki sposób zapisać żeby stan wysoki na wyjściu był tylko przez określony czas w sekundach (sterowanie czasem podnoszenie - opuszczania rolety).
Z góry dziękuję za wszelką pomoc w rozwiązaniu tego problemu.
C/C++
void loop() {
   
    while( Serial.available() )
         delay( 3 );
   
    char c = Serial.read();
    readString += c;
   
    dt = clock.getDateTime();
   
    Serial.print( dt.hour ); Serial.print( ":" );
    Serial.print( dt.minute ); Serial.print( ":" );
    Serial.print( dt.second ); Serial.println( "" );
   
   
    if( readString.length() > 0 ) {
        Serial.println( readString );
       
        // .........................................................
        if( readString == "podnies1" )
        { digitalWrite( rol1up, HIGH ); }
       
        if(( dt.hour == 7 ) &&( dt.minute == 00 ) &&( dt.second == 00 ) )
        { digitalWrite( rol1up, HIGH ); }
       
        if(( dt.hour == 7 ) &&( dt.minute == 5 ) &&( dt.second == 00 ) )
        { digitalWrite( rol1up, LOW ); }
       
        if( readString == "opusc1" )
        {
            digitalWrite( rol1down, HIGH );
        }
        if(( dt.hour == 17 ) &&( dt.minute == 00 ) &&( dt.second == 00 ) )
        { digitalWrite( rol1up, HIGH ); }
       
        if(( dt.hour == 17 ) &&( dt.minute == 5 ) &&( dt.second == 00 ) )
        { digitalWrite( rol1up, LOW ); }
       
        if( readString == "stop1" )
        { digitalWrite( rol1up, LOW );
            digitalWrite( rol1down, LOW );
        }
P-143542
DejaVu
» 2016-01-18 17:37:16
Być może coś takiego powinieneś napisać:
C/C++
void setHighForTime( auto _akcja, unsigned _miliseconds )
{
    digitalWrite( _akcja, HIGH );
    std::this_thread::sleep_for( std::chrono::milliseconds( _miliseconds ) );
    digitalWrite( _akcja, LOW );
}
//(...)

if( readString == "podnies1" )
     setHighForTime( rol1up, 1000 );

if( dt.hour == 7 && dt.minute == 00 && dt.second == 00 )
     setHighForTime( rol1up, 1000 );

if( dt.hour == 7 && dt.minute == 5 && dt.second == 00 )
     setHighForTime( rol1down, 1000 );

P-143740
« 1 »
  Strona 1 z 1