Plots voor de leeuwen geworpen

Situatie:
Binnenkort levering nieuwe ramen , deuren en elektrische rolluiken.
"Kennis" die programma ging schrijven plots van de aardbol (trein, gsmnummer)verdwenen na het meenemen van 2 mega's, lcd scherm, relaiskaarten etc.
Ik heb dus 7 drukknoppen:

Const int buttonrolluik1 = 2
Const int buttonrolluik2 = 3
...
Const int buttonrolluik7 = 8

en 7 variabele statussen:
int knopStatus1 =0
...
int knopStatus7 =0

Ik wil deze in void loop() nu 1 voor 1 inlezen met :

for (int i=1;i<8;i++)   //voor knop 1 tem 7
  {      
    // lees status drukknop:
    knopStatus[i] = digitalRead(butttonrolluik[i]);

Maar ik krijg steeds de melding
Rolluiken:87: error: 'knopStatus' was not declared in this scope
Rolluiken:87: error: 'butttonrolluik' was not declared in this scope

Wat doe ik fout ?

Groeten
Nico

Volledige sketch tot nog toe:

/*Sturing rolluiken en alarmcontacten
 * Met drukknoppen en uitbreiding naar webserver/ bluetooth
 * alarmcontacten loggen via internet
 */

// constants won't change. They're used here to
// set pin numbers:
const int buttonrolluik1 = 2;      // drukknop rolluik 1 Living groot
const int buttonrolluik2 = 3;      // drukknop rolluik 2 Living klein
const int buttonrolluik3 = 4;      // drukknop rolluik 3 slaapkamer Audrey
const int buttonrolluik4 = 5;      // drukknop rolluik 4 Badkamer
const int buttonrolluik5 = 6;      // drukknop rolluik 5 bureau
const int buttonrolluik6 = 7;      // drukknop rolluik 6 slaapkamer
const int buttonrolluik7 =  8;      // drukknop rolluik 7 keuken

const int alarmcontact1 = 22;      // alarm 1 Living groot
const int alarmcontact2 = 23;      // alarm 2 Living klein
const int alarmcontact3 = 24;      // alarm 3 voordeur
const int alarmcontact4 = 25;      // alarm 4 vorraad
const int alarmcontact5 = 26;      // alarm 5 toilet
const int alarmcontact6 = 27;      // alarm 6 slaapkamer Audrey
const int alarmcontact7 = 28;      // alarm 7 Badkamer
const int alarmcontact8 = 29;      // alarm 8 bureau
const int alarmcontact9 = 30;      // alarm 9 slaapkamer
const int alarmcontact10 = 31;     // alarm 10 achterdeur
const int alarmcontact11 = 32;     // alarm 11 kelderdeur
const int alarmcontact12 = 33;     // alarm 12 keuken
const int rolluik1 = 40;               // rolluik living groot
const int rolluikrichting1 =  41;      // rolluik living groot
const int rolluik2 = 42;               // rolluik living klein
const int rolluikrichting2 =  43;      // rolluik living klein
const int rolluik3 = 44;               // rolluik slaapkamer Audrey
const int rolluikrichting3 =  45;      // rolluik slaapkamer Audrey
const int rolluik4 = 46;               // rolluik Badkamer
const int rolluikrichting4 =  47;      // rolluik Badkamer
const int rolluik5 = 48;               // rolluik bureau
const int rolluikrichting5 =  49;      // rolluik bureau
const int rolluik6 = 50;               // rolluik Slaapkamer
const int rolluikrichting6 =  51;      // rolluik Slaapkamer
const int rolluik7 = 52;               // rolluik keuken
const int rolluikrichting7 =  53;      // rolluik keuken


// Veranderlijke variabelen:
int richting1  = 0;         // laatste richting rolluik 1 0=neer 1=omhoog
int richting2  = 0;         // laatste richting rolluik 2 0=neer 1=omhoog
int richting3  = 0;         // laatste richting rolluik 3 0=neer 1=omhoog
int richting4  = 0;         // laatste richting rolluik 4 0=neer 1=omhoog
int richting5  = 0;         // laatste richting rolluik 5 0=neer 1=omhoog
int richting6  = 0;         // laatste richting rolluik 6 0=neer 1=omhoog
int richting7  = 0;         // laatste richting rolluik 7 0=neer 1=omhoog

int knopStatus1 = 0;        // drukknop aan? 0=neen, 1= ja
int knopStatus2 = 0;
int knopStatus3 = 0;
int knopStatus4 = 0;
int knopStatus5 = 0;
int knopStatus6 = 0;
int knopStatus7 = 0;

int inbeweging ;                  // is het rolluik nog in beweging 1=ja, 0=neen
void setup() 
{
  for (int x = 2; x < 9; x++) //buttonrolluik 1 tot 7 output
  { 
    pinMode(x, OUTPUT); 
  
  } 
 
  for (int x = 22; x < 34; x++) // alarmcontact 1 tot 12 input
  { 
    pinMode(x, INPUT); 
  
  } 
 for (int x = 40; x < 54; x++)  // pin 40 tot 53 output
  { 
    pinMode(x, OUTPUT); 
  
  }  
}
void loop()
{
  

  for (int i=1;i<8;i++)   //voor knop 1 tem 7
  {      
    // lees status drukknop:
    knopStatus[i] = digitalRead(butttonrolluik[i]);
   
  // controleer of drukknop is ingedrukt.
  // zo ja, knopStatus is HIGH:
 
  if (knopStatus[i] == HIGH) 
    {
    
    inbeweging =digitalRead(rolluik[i]);  //controleer of rolluik in beweging is
    if (inbeweging == HIGH)               //ja:
        {
        digitalWrite(rolluik[i],LOW)   ;   //rolluik stoppen
        }
    else                                  //neen:
          {    
    if (richting[i] ==0)                  //laatste richting naar beneden? ja
              {
                digitalWrite(rolluikrichting[i],HIGH);   // rolluik moet naar boven
                delay(100);                              // kleine pauze
                digitalWrite(rolluik[i],HIGH);           //rolluik starten
                richting[i]= 1;                          //laatste richting is nu naar boven
              }
    else                                    //laatste richting naar boven 
              {
               digitalWrite(rolluikrichting[i],HIGH);     //rolluik moet naar beneden
               delay(100);                                //kleine pauze
               digitalWrite(rolluik[i],LOW);              //rolluik starten
               richting[i]= 0;                            //laatste richting is nu naar beneden
              }
           }  
    }
         
  else {
   
       }
  }
  
}

knopStatus is een tabel (array). In jouw programma zijn ze als individuele variabelen benoemd. En dat geldt zo ongeveer voor alle variabelen.
Dus ofwel je veranderd de individuele variabelen voor arrays (en laat je het volgnummertje weg) of je gaat alle code ombouwen (zeer inefficient).

Hallo Nico,

Voorlopig heb ik de code volledig aangepast, en compileren geeft geen fouten.
Kan echter nog niet testen, omdat ik wacht op nieuwe mega's.
Ik ga nu eens bekijken hoe die array's werken.
Alvast bedankt.

je mag hier best eenoproep met naam plaatsen om je mega terug te vragen.

const int buttonrolluik[1] = (2,3,4,5,6,7,8);      // drukknop rolluik 1 Living groot
dat is genoeg voor alle knoppen

Hallo Shooter,

Alvast bedankt voor de info.
ivm die oproep met naam wil ik nog wat afwachten tot ik zeker ben dat het geen misverstand is.(Ben misschien nog te goed gelovig?)
Moet die 1 in :
const int buttonrolluik[1] = (2,3,4,5,6,7,8);

geen 7 zijn? (aantal gegevens in de array)of speelt dat geen rol? Ik zie zowel lege haakjes als haakjes met een getal.

Ik heb de code ondertussen ook met die arrays gemaakt, en wat aangepast om te kunnen testen met een uno(3 rolluiken), maar merk voorlopig nog wat problemen met zowel de drukknoppen en/of het veranderen van richting.
Ik plaats ze hier nog eens , zodat eventueel iemand nog fouten vindt.

/*Sturing rolluiken en alarmcontacten
 * Met drukknoppen en uitbreiding naar webserver/ bluetooth
 * alarmcontacten loggen via internet
 */

// constants won't change. They're used here to
// set pin numbers:
const int buttonrolluik[3] ={2,3,4};      
     


const int rolluik[3]={5,6,7};
const int rolluikrichting[3]={8,9,10};

// Veranderlijke variabelen:
int richting[3]  = {0,0,0};         // laatste richting rolluik 1 0=neer 1=omhoog
int knopStatus[3]= {0,0,0} ;         // drukknop aan? 0=neen, 1= ja
unsigned long start;
unsigned long now;
unsigned long test;
int inbeweging ;                  // is het rolluik nog in beweging 1=ja, 0=neen
void setup() 
{
  for (int x =0; x < 3; x++) //buttonrolluik 1 tot 3 output
  { 
   pinMode(buttonrolluik[x], INPUT); 
   digitalWrite(buttonrolluik[x],HIGH);
   pinMode(rolluik[x],OUTPUT);
   pinMode(rolluikrichting[x],OUTPUT);
  }
  
}
void loop()
{
  
  for (int i=0;i<3;i++)   //voor knop 1 tem 3
  {      
    // lees status drukknop:
    knopStatus[i] = !digitalRead(buttonrolluik[i]);
     // controleer of drukknop is ingedrukt.
  // zo ja, knopStatus is HIGH:
 
  if (knopStatus[i] == HIGH) 
    {
          start=millis();
    
        inbeweging =digitalRead(rolluik[i]);  //controleer of rolluik in beweging is
        Serial.println(inbeweging);
        
    if (inbeweging == HIGH)               //ja:
        {
        digitalWrite(rolluik[i],LOW)   ; 
        digitalWrite(rolluikrichting[i],LOW);//rolluik stoppen
        }
    else                                  //neen:
          {    
    if (richting[i] ==0)                  //laatste richting naar beneden? ja
              {
                digitalWrite(rolluikrichting[i],HIGH);   // rolluik moet naar boven
                delay(50);                              // kleine pauze
                digitalWrite(rolluik[i],HIGH);           //rolluik starten
                richting[i]= 1;                          //laatste richting is nu naar boven
              }
    else                                    //laatste richting naar boven 
              {
               digitalWrite(rolluikrichting[i],HIGH);     //rolluik moet naar beneden
               delay(50);                                //kleine pauze
               digitalWrite(rolluik[i],LOW);              //rolluik starten
               richting[i]= 0;                            //laatste richting is nu naar beneden
              }
           }   
    }
         
  else {
   test=start + 60000;
   now=millis();
   if (now < start){
    start=now;
   }
   }
      if (now > test){
    digitalWrite(rolluik[i],LOW);
    delay(50);
    digitalWrite(rolluikrichting[i],LOW);
   }
   else {
        }    
  }
  }

Hoi.

Dat heb je correct opgemerkt, je moet het aantal velden in de array opgeven.

Als je problemen hebt, vertel dan precies welke dat zijn.
Jij hebt de hulp nodig, waarom zou iemand zich geroepen moeten voelen te gaan speuren naar alle mogelijke problemen als jij weet wat je problemen zijn ?

Daarom is het veel beter als je vertelt wat je verwacht te zien, en wat je nu ziet.
Zo help jij ons jou te helpen.
Wanneer je code veel uitgebreider wordt dan de bijna 90 regels die ie nu is, word het een monnikenwerk om jou van je problemen af te helpen.

Ik zie dat je (ervoor hebt gekozen dat) een mix van de 'blink without delay' en wat delays te gebruiken.
Kun je vertellen waarom je dat een goed idee vond (wie weet overtuig je ons daarvan) ?

Verder zie ik dat je niet meer dan eens per keer controleert of de knop is ingedrukt.
Daarmee houd je geen rekening met een belangrijke eigenschap van schakelaars waar je echt wel rekening mee moet houden: contact dender.
Dus zoek eens op hoe je die dender kunt aanpakken (steekwoord debounce).

vadeveni:
Moet die 1 in :
const int buttonrolluik[1] = (2,3,4,5,6,7,8);

geen 7 zijn? (aantal gegevens in de array)of speelt dat geen rol? Ik zie zowel lege haakjes als haakjes met een getal.

Als je een array gelijk initialiseert, dan bepaalt de compiler wel voor je hoe groot die array is. Echter waar je wel rekening mee moet houden is dat arrays beginnen bij index 0. Jou code begint bij index 1. Dat zou betekenen dat je bij index=7 buiten de array variabelen zit te initialiseren en dat gaat gegarandeerd voor problemen zorgen.

de 1 mag je ook weghalen zoals nico verteld, maar inderdaad moet een 7 zijn.

verder kan een INT niet HIGH zijn een boolean trouwens ook niet zie hiervoor de conversions boolean etc.
wel.

Hallo,
Ik ben zeker niet ondankbaar voor de hulp.
Vragen liggen eventjes stil omdat ik zopas begonnen ben met avondschool arduino.
Hopelijk kan ik met deze lessen dan ook verder.

Alvast bedankt

vadeveni:
Vragen liggen eventjes stil omdat ik zopas begonnen ben met avondschool arduino.

Bestaat dat dan?

Mijn Arduino avondschool is vrijwel dagelijks het bezoek aan het forum alhier.

De reguliere avondschool (whatever richting) is allang voorbij voor ik op een doorsnee dag thuis ben.